package com.example.springboot.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboot.common.Result;
import com.example.springboot.entity.AdjustRoom;
import com.example.springboot.service.AdjustRoomService;
import com.example.springboot.service.DormRoomService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
/**
 * 调宿订单管理控制器
 * 处理调宿申请的增删改查等RESTful接口
 */

@RestController  // 标记为RESTful风格的控制器，返回JSON格式数据
@RequestMapping("/adjustRoom")// 映射请求路径前缀
public class AdjustRoomController {// 注入调宿订单业务层实现

    @Resource// JSR-250规范的资源注入注解，等价于@Autowired
    private AdjustRoomService adjustRoomService;
    // 注入宿舍房间业务层实现
    @Resource
    private DormRoomService dormRoomService;
/**
 * 创建调宿申请订单
 *
 * @param adjustRoom 调宿订单实体对象（JSON格式请求体）
 * @return 操作结果（成功或失败信息）
 */

    /**
     * 添加订单
     */
    @PostMapping("/add")// 映射POST请求：/adjustRoom/add
    public Result<?> add(@RequestBody AdjustRoom adjustRoom) {
        // 调用业务层方法创建订单
        int result = adjustRoomService.addApply(adjustRoom);
        // 根据业务层返回值判断操作结果
        if (result == 1) {
            return Result.success();// 返回成功结果
        } else {
            return Result.error("-1", "查询失败");// 返回失败结果
        }
    }


    /**
     * 更新调宿订单状态
     *
     * @param adjustRoom 调宿订单实体（包含需要更新的字段）
     * @param state      订单状态标识（true表示确认，false表示取消）
     * @return 操作结果
     */
    @PutMapping("/update/{state}")// 映射PUT请求：/adjustRoom/update/{state}
    public Result<?> update(@RequestBody AdjustRoom adjustRoom, @PathVariable Boolean state) {
        // 从路径变量获取state值
        // 如果是确认操作（state=true），需要更新宿舍房间信息
        if (state) {
            // 调用宿舍房间业务层方法更新房间状态
            int i = dormRoomService.adjustRoomUpdate(adjustRoom);
            // 处理业务层返回的特殊错误码
            if (i == -2) {
                return Result.error("-1", "重复操作");
            } // 更新调宿订单表信息
        }
        int i = adjustRoomService.updateApply(adjustRoom); // 根据更新结果返回响应
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "更新失败");
        } /**
         * 删除调宿订单
         *
         * @param id 订单ID（路径变量）
         * @return 操作结果
         */
    }

    /**
     * 删除订单
     */
    @DeleteMapping("/delete/{id}")// 映射DELETE请求：/adjustRoom/delete/{id}
    public Result<?> delete(@PathVariable Integer id) {// 从路径变量获取id
        // 调用业务层删除方法
        int i = adjustRoomService.deleteAdjustment(id);
        // 根据删除结果返回响应
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "删除失败");
        }
    }

    /**
     * 查找订单
     */
    @GetMapping("/find")// 映射GET请求：/adjustRoom/find
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,// 请求参数（默认值1）
                              @RequestParam(defaultValue = "10") Integer pageSize,// 请求参数（默认值10）
                              @RequestParam(defaultValue = "") String search) {// 请求参数（默认空字符串）
        // 调用业务层分页查询方法
        Page page = adjustRoomService.find(pageNum, pageSize, search);
        // 根据查询结果返回响应
        if (page != null) {
            return Result.success(page); // 返回分页数据
        } else {
            return Result.error("-1", "查询失败");
        }
    }
}
